/**
 * 日志管理工具（简化版）
 * 只在指定域名下执行 console.log
 */

import { loggerConfig } from '../config/logger.config.js'

class Logger {
  constructor() {
    // 允许显示日志的域名列表
    this.allowedDomains = loggerConfig.allowedDomains;
    this.showInitInfo = loggerConfig.showInitInfo;
    
    // 保存原始的 console 方法
    this.originalConsole = {
      log: console.log.bind(console),
      warn: console.warn.bind(console),
      error: console.error.bind(console),
      info: console.info.bind(console),
      debug: console.debug.bind(console),
    };
  }

  /**
   * 检查当前域名是否在允许列表中
   */
  isAllowedDomain() {
    const currentDomain = window.location.hostname;
    return this.allowedDomains.includes(currentDomain);
  }

  /**
   * 创建受控的 console 方法
   */
  createControlledConsole(method) {
    return (...args) => {
      if (this.isAllowedDomain()) {
        this.originalConsole[method](...args);
      }
    };
  }

  /**
   * 初始化日志控制
   */
  init() {
    // 只在浏览器环境中执行
    if (typeof window !== 'undefined') {
      // 替换 console 方法
      console.log = this.createControlledConsole('log');
      console.warn = this.createControlledConsole('warn');
      console.error = this.createControlledConsole('error');
      console.info = this.createControlledConsole('info');
      console.debug = this.createControlledConsole('debug');

      // 在允许的域名下显示初始化信息
      if (this.showInitInfo && this.isAllowedDomain()) {
        this.originalConsole.info('🚀 日志管理器已初始化');
        this.originalConsole.info('📍 当前域名:', window.location.hostname);
        this.originalConsole.info('✅ 允许的域名:', this.allowedDomains);
      }
    }
  }

  /**
   * 强制输出日志（无论域名限制）
   */
  forceLog(...args) {
    this.originalConsole.log(...args);
  }

  /**
   * 添加允许的域名
   */
  addAllowedDomain(domain) {
    if (!this.allowedDomains.includes(domain)) {
      this.allowedDomains.push(domain);
    }
  }

  /**
   * 移除允许的域名
   */
  removeAllowedDomain(domain) {
    const index = this.allowedDomains.indexOf(domain);
    if (index > -1) {
      this.allowedDomains.splice(index, 1);
    }
  }

  /**
   * 设置允许的域名列表
   */
  setAllowedDomains(domains) {
    this.allowedDomains = domains;
  }

  /**
   * 获取允许的域名列表
   */
  getAllowedDomains() {
    return [...this.allowedDomains];
  }
}

// 导出单例实例
export default new Logger(); 